//
//  WmcCameraSettingDelegate.swift
//  YPWatermarkCamera
//
//  Created by 赵新 on 2022/4/15.
//

import Foundation
import YPBedrock

// MARK: - [WmcCameraSettingDelegate]

/// 相机设置页代理
public protocol WmcCameraSettingDelegate: NSObjectProtocol {
    // MARK: 设置已有默认的Cell

    /// 相机设置页第一组使用的Cell
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - defaultList: 默认的按钮列表
    /// - Returns: 自定义设置后的按钮列表
    func settingFirstMenuCellList(_ attribute: WmcAttribute,
                                  defaultList: [WmcButtonItemType.CameraSettingCell])
        -> [WmcButtonItemType.CameraSettingCell]

    /// 相机设置页最后组使用的Cell
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - defaultList: 默认的按钮列表
    /// - Returns: 自定义设置后的按钮列表
    func settingLastMenuCellList(_ attribute: WmcAttribute,
                                 defaultList: [WmcButtonItemType.CameraSettingCell])
        -> [WmcButtonItemType.CameraSettingCell]

    // MARK: 自定义列表

    /// 相机设置页进行注册Cell
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    /// - Returns: 注册Cell的对象集合
    func tableViewRegisterCell(_ attribute: WmcAttribute)
        -> [YPRegister]

    /// 有多少组
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - tableView: tableView
    /// - Returns: 组数量
    func numberOfSections(_ attribute: WmcAttribute,
                          in tableView: UITableView)
        -> Int

    /// 每组有多少cell数量
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - tableView: tableView
    ///   - section: 第几组
    /// - Returns: 这组的数量
    func tableView(_ attribute: WmcAttribute,
                   tableView: UITableView,
                   numberOfRowsInSection section: Int)
        -> Int

    /// 返回Cell
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - tableView: tableView
    ///   - indexPath: 索引
    /// - Returns: Cell
    func tableView(_ attribute: WmcAttribute,
                   tableView: UITableView,
                   cellForRowAt indexPath: IndexPath)
        -> UITableViewCell?

    /// 每个Cel的l高度
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - tableView: tableView
    ///   - indexPath: 索引
    /// - Returns: Cell高度
    func tableView(_ attribute: WmcAttribute,
                   tableView: UITableView,
                   heightForRowAt indexPath: IndexPath)
        -> CGFloat

    /// 组头高度
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - tableView: tableView
    ///   - section: 第几组
    /// - Returns: 组头高度
    func tableView(_ attribute: WmcAttribute,
                   tableView: UITableView,
                   heightForHeaderInSection section: Int)
        -> CGFloat

    /// 组头视图
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - tableView: tableView
    ///   - section: 第几组
    /// - Returns: 组头视图
    func tableView(_ attribute: WmcAttribute,
                   tableView: UITableView,
                   viewForHeaderInSection section: Int)
        -> UIView?

    /// 组尾高度
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - tableView: tableView
    ///   - section: 第几组
    /// - Returns: 组尾高度
    func tableView(_ attribute: WmcAttribute,
                   tableView: UITableView,
                   heightForFooterInSection section: Int)
        -> CGFloat

    /// 组尾视图
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - tableView: tableView
    ///   - section: 第几组
    /// - Returns: 组尾视图
    func tableView(_ attribute: WmcAttribute,
                   tableView: UITableView,
                   viewForFooterInSection section: Int)
        -> UIView?

    /// Cell点击
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - tableView: tableView
    ///   - indexPath: 索引
    func tableView(_ attribute: WmcAttribute,
                   tableView: UITableView,
                   didSelectRowAt indexPath: IndexPath)
        -> WmcActionType
}

// MARK: - 驱动方法

public extension WmcMediaBrowseDelegate {
    /// 刷新设置列表的tableView
    func wmc_reloadTableData() {
        YPWmcDrivingManager.shared.cameraSetting_reloadTableDataBlock?()
    }
}

// MARK: - =========================⚠️以下对接业务方无需查看或了解⚠️=========================

// MARK: 可选方法

public extension WmcCameraSettingDelegate {
    /// 相机设置页第一组使用的Cell
    func settingFirstMenuCellList(_ attribute: WmcAttribute,
                                  defaultList: [WmcButtonItemType.CameraSettingCell]) -> [WmcButtonItemType.CameraSettingCell]
    {
        return defaultList
    }

    /// 相机设置页最后组使用的Cell
    func settingLastMenuCellList(_ attribute: WmcAttribute,
                                 defaultList: [WmcButtonItemType.CameraSettingCell]) -> [WmcButtonItemType.CameraSettingCell]
    {
        return defaultList
    }

    /// 相机设置页进行注册Cell
    func tableViewRegisterCell(_ attribute: WmcAttribute) -> [YPRegister] {
        return []
    }

    /// 每组有多少cell数量
    func tableView(_ attribute: WmcAttribute,
                   tableView: UITableView,
                   numberOfRowsInSection section: Int) -> Int
    {
        return 0
    }

    /// 返回Cell
    func tableView(_ attribute: WmcAttribute,
                   tableView: UITableView,
                   cellForRowAt indexPath: IndexPath) -> UITableViewCell?
    {
        return nil
    }

    /// 有多少组
    func numberOfSections(_ attribute: WmcAttribute,
                          in tableView: UITableView) -> Int
    {
        return 1
    }

    /// cell高度
    func tableView(_ attribute: WmcAttribute,
                   tableView: UITableView,
                   heightForRowAt indexPath: IndexPath) -> CGFloat
    {
        return UITableView.automaticDimension
    }

    /// 组头高度
    func tableView(_ attribute: WmcAttribute,
                   tableView: UITableView,
                   heightForHeaderInSection section: Int) -> CGFloat
    {
        return 8
    }

    /// 组头视图
    func tableView(_ attribute: WmcAttribute,
                   tableView: UITableView,
                   viewForHeaderInSection section: Int) -> UIView?
    {
        return nil
    }

    /// 组尾高度
    func tableView(_ attribute: WmcAttribute,
                   tableView: UITableView,
                   heightForFooterInSection section: Int) -> CGFloat
    {
        return .YP.Min
    }

    /// 组尾视图
    func tableView(_ attribute: WmcAttribute,
                   tableView: UITableView,
                   viewForFooterInSection section: Int) -> UIView?
    {
        return nil
    }

    /// cell点击
    func tableView(_ attribute: WmcAttribute,
                   tableView: UITableView,
                   didSelectRowAt indexPath: IndexPath) -> WmcActionType
    {
        return .default
    }
}
